package com.powerbank.common.client;

import com.powerbank.common.result.Result;
import com.powerbank.common.result.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 用户中心客户端降级实现
 */
@Slf4j
@Component
public class UserCenterClientFallback implements UserCenterClient {

    @Override
    public Result<Map<String, Object>> getUserInfo(Long userId) {
        log.warn("用户中心服务不可用，获取用户信息降级处理: userId={}", userId);
        return Result.error("用户服务暂时不可用，请稍后重试");
    }

    @Override
    public Result<Map<String, Object>> getUserByPhone(String phone) {
        log.warn("用户中心服务不可用，根据手机号获取用户降级处理: phone={}", phone);
        return Result.error("用户服务暂时不可用，请稍后重试");
    }

    @Override
    public Result<Boolean> checkUserExists(Long userId) {
        log.warn("用户中心服务不可用，检查用户存在性降级处理: userId={}", userId);
        return Result.success(true); // 降级时假设用户存在，避免影响业务流程
    }

    @Override
    public Result<Map<String, Object>> getIdentityStatus(Long userId) {
        log.warn("用户中心服务不可用，获取身份认证状态降级处理: userId={}", userId);
        return Result.error("用户服务暂时不可用，请稍后重试");
    }

    @Override
    public Result<Void> addUserPoints(Long userId, Integer points, String reason) {
        log.warn("用户中心服务不可用，增加用户积分降级处理: userId={}, points={}", userId, points);
        return Result.error("用户服务暂时不可用，积分操作失败");
    }

    @Override
    public Result<Integer> getUserPoints(Long userId) {
        log.warn("用户中心服务不可用，获取用户积分降级处理: userId={}", userId);
        return Result.success(0); // 降级时返回0积分
    }

    @Override
    public Result<Void> disableUser(Long userId) {
        log.warn("用户中心服务不可用，禁用用户降级处理: userId={}", userId);
        return Result.error("用户服务暂时不可用，操作失败");
    }

    @Override
    public Result<Void> enableUser(Long userId) {
        log.warn("用户中心服务不可用，启用用户降级处理: userId={}", userId);
        return Result.error("用户服务暂时不可用，操作失败");
    }

    @Override
    public Result<PageResult<Map<String, Object>>> getUserPage(Integer page, Integer size, String keyword) {
        log.warn("用户中心服务不可用，分页查询用户降级处理");
        return Result.error("用户服务暂时不可用，请稍后重试");
    }

    @Override
    public Result<com.powerbank.common.dto.UserDTO> getUserById(Long userId) {
        log.warn("用户中心服务不可用，获取用户DTO降级处理: userId={}", userId);
        return Result.error("用户服务暂时不可用，请稍后重试");
    }
}